import { sysLogin, sysProfile, sysUser } from '@/api/user'
// 导入路由、动态路由、静态路由
import router, { asyncRoutes, constantRoutes, resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    token: '',
    userInfo: ''
  },
  mutations: {
    // 设置vuex里的token值
    setToken(state, value) {
      state.token = value
    },
    // 设置userName
    setUserInfo(state, value) {
      state.userInfo = value
    },
    // 清除数据
    removeUser(state) {
      state.token = ''
      state.userInfo = ''
      // 重置路由
      resetRouter()
    }
  },
  actions: {
    //  调用登录接口
    async toLogin(store, value) {
      const res = await sysLogin(value)
      store.commit('setToken', res.data)
    },
    // 获取用户信息
    async getUserInfo(store) {
      const res = await sysProfile()
      // console.log(res)
      // store.commit('setUserInfo', res.data)
      const res2 = await sysUser(res.data.userId)
      // console.log(res2)
      // 合并对象  1：{...res.data,...res2.data} 2:返回值=Object.assign({}，res.data,res2.data,....)
      const resULTRes = Object.assign({}, res.data, res2.data)
      // console.log(resULTRes)
      store.commit('setUserInfo', resULTRes)

      // 此时已经拿到当前用户的路由权限数据
      // 路由权限数据：resULTRes.roles.menus
      // 动态路由数据：asyncRoutes
      // 匹配过程就是队动态路由做赛选，选中当前项的mete.name的值在路由权限数据中是否存在
      const newArr = asyncRoutes.filter((item) => {
        return resULTRes.roles.menus.includes(item.meta.name)
      })
      // 添加404匹配
      newArr.push({ path: '*', redirect: '/404', hidden: true })
      // 通过路由的方法 router.addRoutes(匹配到的路由)添加有权限的动态路由
      // 注意：通过addRoutes添加的路由不能立马使用，需要在过一次导航守卫，就可以使用了
      router.addRoutes(newArr)
      // 同步到vuex中的routes模块内
      // user模块action调用routes模块的mutations方法
      store.commit('routes/setRoutesList', [...constantRoutes, ...newArr], {
        root: true
      })
    }
  },
  getters: {}
}
